In [1]:
import matplotlib.pyplot as plt
import numpy as np
import os
from extract_center import CenterExtracter
import pandas as pd
import random
In [2]:
plt.rcdefaults()
In [3]:
image_path = "../data/images1"
c = CenterExtracter()
In [4]:
image = plt.imread(image_path+"/120.jpg")
c.get_center(image_path+"/120.jpg", h=500, w=500, subtract=True, strict=False)
Out[4]:
((9, 9), (1026, 582))
In [5]:
images = os.listdir(image_path)
len(images)
Out[5]:
171
In [6]:
sorted_images = sorted(images, key=lambda x: int(x.split(".")[0]))
In [7]:
xs = []
ys = []
r1s = []
r2s = []
for img in sorted_images:
    if img.endswith(".jpg"):
        try:
            (r1, r2), (x, y) = c.get_center(image_path+"/"+img, h=500, w=500, subtract=True, strict=False,
            plot=False)
            xs.append(x)
            ys.append(y)
            r1s.append(r1)
            r2s.append(r2)
        except:
            # clear_output(wait=True)
            print("Error on: ", img)
            xs.append(None)
            ys.append(None)
            r1s.append(None)
            r2s.append(None)
Error on:  71.jpg
Error on:  102.jpg
Error on:  160.jpg
Error on:  161.jpg
Error on:  162.jpg
Error on:  163.jpg
Error on:  164.jpg
Error on:  165.jpg
Error on:  166.jpg
Error on:  167.jpg
Error on:  168.jpg
Error on:  169.jpg
Error on:  170.jpg
In [8]:
df = pd.DataFrame({"image": sorted_images, "x": xs, "y": ys, "r1": r1s, "r2": r2s})
df.head()
Out[8]:
image x y r1 r2
0 0.jpg 871.0 401.0 10.0 13.0
1 1.jpg 871.0 401.0 10.0 13.0
2 2.jpg 871.0 401.0 10.0 13.0
3 3.jpg 871.0 401.0 10.0 13.0
4 4.jpg 871.0 401.0 10.0 13.0
In [10]:
len_samples = 49
plt.figure(figsize=(30, 30))
df = df[df["x"].notna()]
samples = random.sample(list(df["image"][:-10]), len_samples)
for img in samples:
    plt.subplot(7, 7, samples.index(img)+1)
    x, y =  df[df["image"] == img]["x"].values[0], df[df["image"] == img]["y"].values[0]
    plt.imshow(plt.imread(image_path+"/"+img)[200:, 500:], cmap="gray")
    plt.hlines(y-200, 0, 1300-600, color="r")
    plt.vlines(x-500, 0, 800-300, color="g")
    plt.title(img)
    plt.axis("off")
plt.tight_layout()
plt.annotate("With Subtracting", (0, 0), (0, -30), xycoords='axes fraction', textcoords='offset points', va='top', fontsize=30)
plt.savefig("samples_with_subtracting.jpg")
In [11]:
df.to_csv("../data/results/with_subtraction.csv", index=False)

A Preliminary Analysis of the Coordinates

In [13]:
plt.plot(df["y"], ".")
plt.title("y with time");
In [14]:
plt.plot(df["x"], ".")
plt.title("x with time");
In [15]:
plt.plot(df["x"], -df["y"], ".")
plt.title("x-y with time");
In [16]:
df["vy"] = df["y"].diff()
df["vx"] = df["x"].diff()
df["v"] = np.sqrt(df["vy"]**2 + df["vx"]**2)
In [17]:
plt.plot(df["v"], ".")
plt.title("v with time");
In [18]:
plt.plot(df["vy"], ".")
plt.title("vy with time");
In [19]:
plt.plot(df["vx"], ".")
plt.title("vx with time");
In [26]:
plt.plot(df['r1'], ".")
plt.ylim([5,15]);
In [27]:
plt.plot(df['r2'], ".")
plt.ylim([5,15]);
In [20]:
df.describe()
Out[20]:
x y r1 r2 vy vx v
count 158.000000 158.000000 158.000000 158.000000 157.000000 157.000000 157.000000
mean 948.101266 536.468354 10.575949 9.132911 1.203822 2.095541 4.378646
std 108.452413 81.800259 5.894286 1.885596 4.083643 3.754968 4.166342
min 856.000000 401.000000 0.000000 1.000000 -17.000000 -14.000000 0.000000
25% 869.000000 453.500000 10.000000 8.000000 0.000000 0.000000 3.000000
50% 872.500000 571.000000 10.000000 9.000000 1.000000 1.000000 4.000000
75% 1024.500000 593.000000 10.000000 10.000000 3.000000 4.000000 5.099020
max 1200.000000 661.000000 49.000000 13.000000 20.000000 21.000000 29.000000
In [1]:
from run import Run
In [2]:
r = Run("../data/images1")
In [3]:
r.subtracting_images(subtract=True, strict=False,
            plot=False)
Getting list of images...
Extracting data from images...
Error on:  ../data/images1/71.jpg
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
c:\Users\harik\Desktop\mini-project\codes\subtracting_images.ipynb Cell 24' in <cell line: 1>()
----> <a href='vscode-notebook-cell:/c%3A/Users/harik/Desktop/mini-project/codes/subtracting_images.ipynb#ch0000023?line=0'>1</a> r.subtracting_images(subtract=True, strict=False,
      <a href='vscode-notebook-cell:/c%3A/Users/harik/Desktop/mini-project/codes/subtracting_images.ipynb#ch0000023?line=1'>2</a>             plot=False)

File c:\Users\harik\Desktop\mini-project\codes\run.py:283, in Run.subtracting_images(self, h, w, save, file_name, **kwargs)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=280'>281</a>         except Exception as e:
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=281'>282</a>             print("Error on: ", img)
--> <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=282'>283</a>             raise e
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=283'>284</a>             continue
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=284'>285</a> if save:

File c:\Users\harik\Desktop\mini-project\codes\run.py:278, in Run.subtracting_images(self, h, w, save, file_name, **kwargs)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=275'>276</a> if img.endswith(".jpg"):
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=276'>277</a>     try:
--> <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=277'>278</a>         (r1, r2), (x, y) = self.c.get_center(img, h=500, w=500, **kwargs)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=278'>279</a>         self.centers_si[img] = (x, y)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/run.py?line=279'>280</a>         self.radii_si[img] = (r1, r2)

File c:\Users\harik\Desktop\mini-project\codes\extract_center.py:579, in CenterExtracter.get_center(self, image_path, subtract, x, y, h, w, output, title, strict, plot, threshold, crop_included, reverse)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=576'>577</a>     image = self._stricting_(x, y)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=577'>578</a> # calculating center
--> <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=578'>579</a> center, radii = self._center_and_radius_(
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=579'>580</a>     image, crop_included=crop_included, reverse=reverse
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=580'>581</a> )
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=581'>582</a> if plot:
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=582'>583</a>     self._plot_(title)

File c:\Users\harik\Desktop\mini-project\codes\extract_center.py:320, in CenterExtracter._center_and_radius_(self, image, reverse, crop_included)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=298'>299</a> def _center_and_radius_(
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=299'>300</a>     self,
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=300'>301</a>     image,
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=301'>302</a>     reverse,
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=302'>303</a>     crop_included=True,
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=303'>304</a> ):
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=304'>305</a>     """
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=305'>306</a>     Calculates the center of the drop.
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=306'>307</a> 
   (...)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=317'>318</a>         radius of the drop
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=318'>319</a>     """
--> <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=319'>320</a>     (xl, xr), (yu, yd) = self._center_x_(image, reverse=reverse), self._center_y_(
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=320'>321</a>         image, reverse=reverse
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=321'>322</a>     )
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=323'>324</a>     r1 = int(np.abs((xl - xr)) / 2)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=324'>325</a>     r2 = int(np.abs((yu - yd)) / 2)

File c:\Users\harik\Desktop\mini-project\codes\extract_center.py:268, in CenterExtracter._center_x_(self, image, reverse)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=265'>266</a>     xs = image.argmin(axis=0)
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=266'>267</a> xss = np.nonzero(xs)
--> <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=267'>268</a> xl = xss[0][0]
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=268'>269</a> xr = xss[0][-1]
    <a href='file:///c%3A/Users/harik/Desktop/mini-project/codes/extract_center.py?line=269'>270</a> self.centers_x = (xl, xr)

IndexError: index 0 is out of bounds for axis 0 with size 0
In [5]:
r.c._show_image_(r.c.image_final)